package com.itheima.wisdomnext.service.ImpI;

import com.itheima.wisdomnext.entity.Ban;
import com.itheima.wisdomnext.entity.Result.enumcalss.ErrorCode;
import com.itheima.wisdomnext.mapper.BanMapper;
import com.itheima.wisdomnext.service.BanService;
import com.itheima.wisdomnext.util.BanS_Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BanServiceImpl implements BanService {

    @Autowired
    private BanMapper banMapper;

    // 封禁用户
    @Override
    public void banUser(Ban ban) {
        // 封禁用户本身
        int userUpdateResult = banMapper.updateUserBanned(ban.getUserId());
        if (userUpdateResult == 0) {
            BanS_Util.isTrue(true, ErrorCode.PARAMS_ERROR, "用户封禁失败，未找到用户");
        }

        // 封禁用户的所有帖子
        banMapper.updatePostBannedByUserId(ban.getUserId());

        // 更新分类表中的帖子数量
        banMapper.decreasePostCountByUserId(ban.getUserId());

        // 封禁用户的所有评论
        banMapper.updateCommentBannedByUserId(ban.getUserId());

        // 添加封禁记录
        banMapper.insertBan(ban);
    }

    // 封禁帖子
    @Override
    public void banPost(Ban ban) {
        // 封禁帖子本身
        int postUpdateResult = banMapper.updatePostBanned(ban.getPostId());
        if (postUpdateResult == 0) {
            BanS_Util.isTrue(true,ErrorCode.PARAMS_ERROR, "帖子封禁失败");
        }

        // 更新分类表中的帖子数量
        banMapper.updateCategoryun(ban.getPostId());

        // 封禁帖子下的所有评论
        banMapper.updateCommentBannedByPostId(ban.getPostId());

        // 添加封禁记录
        banMapper.insertBan(ban);
    }

    // 封禁评论
    @Override
    public void banComment(Ban ban) {
        // 封禁评论本身
        int commentUpdateResult = banMapper.updateSingleCommentBanned(ban.getCommentId());
        if (commentUpdateResult == 0) {
            BanS_Util.isTrue(true,ErrorCode.PARAMS_ERROR, "评论封禁失败");
        }

        // 添加封禁记录
        banMapper.insertBan(ban);
    }

    // 解禁用户
    @Override
    public void unbanUser(Ban ban) {
        // 更新封禁记录为解禁
        int i = banMapper.updateBanRecordToUnbanned(ban.getUserId(), null, null);
        if (i == 0) {
            BanS_Util.isTrue(true,ErrorCode.FAILED,"解禁失败");
        }

        // 更新分类表中的帖子数量，增加被解禁的帖子数量
        banMapper.increasePostCountByUserId(ban.getUserId());

        // 解禁用户
        banMapper.updateUserUnbanned(ban.getUserId());

        // 解禁用户的所有帖子
        banMapper.updatePostUnbannedByUserId(ban.getUserId());

        // 解禁用户的所有评论
        banMapper.updateCommentUnbannedByUserId(ban.getUserId());
    }

    // 解禁帖子
    @Override
    public void unbanPost(Ban ban) {
        // 解禁帖子
        int postUpdateResult = banMapper.updatePostUnbanned(ban.getPostId());
        if (postUpdateResult == 0) {
            BanS_Util.isTrue(true,ErrorCode.PARAMS_ERROR, "帖子解禁失败");
        }

        // 更新分类表中的帖子数量
        banMapper.updateCategory(ban.getPostId());

        // 解禁帖子下的所有评论
        banMapper.updateCommentUnbannedByPostId(ban.getPostId());

        // 更新封禁记录为解禁
        banMapper.updateBanRecordToUnbanned(null, ban.getPostId(), null);
    }

    // 解禁评论
    @Override
    public void unbanComment(Ban ban) {
        // 解禁评论
        int commentUpdateResult = banMapper.updateSingleCommentUnbanned(ban.getCommentId());
        if (commentUpdateResult == 0) {
            BanS_Util.isTrue(true,ErrorCode.PARAMS_ERROR, "评论解禁失败");
        }

        // 更新封禁记录为解禁
        banMapper.updateBanRecordToUnbanned(null, null, ban.getCommentId());
    }

    // 查询封禁记录
    @Override
    public Ban getBanInfo(Integer userId, Integer postId, Integer commentId) {
        // 查询封禁信息
        Ban banInfo = banMapper.findBanInfo(userId, postId, commentId);

        // 判断查询结果是否为空，如果为空则抛出异常
        if (banInfo == null) {
            BanS_Util.isTrue(true,ErrorCode.PARAMS_ERROR, "未找到相关封禁记录");
        }

        return banInfo;
    }
}